"ui";
importClass(android.view.View);
importClass(android.provider.Settings);
importClass(android.content.Intent);
importClass(android.net.Uri);
importClass(android.app.ActivityManager);
importClass(android.content.Context);
importClass(java.lang.Thread);

var ipName = "org.soutaproxy"; // 替换为你想要启动的应用包名
var 推广数=0;
var 检测="false"
var LOGFLOAT = false;
var maxLines = 10; // 最大显示行数
var floatyLogW; // 日志悬浮窗引用
var floatyControlW; // 控制按钮悬浮窗引用
var isLogVisible = true; // 记录日志悬浮窗的可见性
var originalPosition = { x: 0, y: 0 }; // 保存日志悬浮窗的原始位置
var isPaused = false; // 新增暂停状态标记
// 使用 storages 模块来保存和读取配置
var storage = storages.create("config");
var 标准版 = "kwai://profile/";
var 极速版 = "ksnebula://profile/";
var 快手= "com.smile.gifmaker:id/"
var 快手极速= "com.kuaishou.nebula:id/"
var url = "https://www.baidu.com"; // 设定要检查的URL

// 初始化配置
function loadConfig() {
    ui.输入框_视频浏览最小量.setText(storage.get("视频浏览最小量", "16"));
    ui.输入框_视频浏览最大量.setText(storage.get("视频浏览最大量", "35"));
    ui.输入框_视频浏览最小间隔.setText(storage.get("视频浏览最小间隔", "3"));
    ui.输入框_视频浏览最大间隔.setText(storage.get("视频浏览最大间隔", "6"));
    ui.输入框_广告视频浏览最小间隔.setText(storage.get("广告视频浏览最小间隔", "8"));
    ui.输入框_广告视频浏览最大间隔.setText(storage.get("广告视频浏览最大间隔", "12"));
    ui.主页ID.setText(storage.get("主页ID", "3757389097#4336805973#439890853705630"));
    ui.切换阈值.setText(storage.get("切换阈值", "3"));
}

// 保存配置
function saveConfig() {
    // 获取 输入框的值并转换为字符串
    const minCount = ui.输入框_视频浏览最小量.getText().toString();
    const maxCount = ui.输入框_视频浏览最大量.getText().toString();
    const minInterval = ui.输入框_视频浏览最小间隔.getText().toString();
    const maxInterval = ui.输入框_视频浏览最大间隔.getText().toString();
    const adMinInterval = ui.输入框_广告视频浏览最小间隔.getText().toString();
    const adMaxInterval = ui.输入框_广告视频浏览最大间隔.getText().toString();
    const homepageId = ui.主页ID.getText().toString();
    const switchThreshold = ui.切换阈值.getText().toString();

    // 使用 storage 保存配置
    storage.put("视频浏览最小量", minCount);
    storage.put("视频浏览最大量", maxCount);
    storage.put("视频浏览最小间隔", minInterval);
    storage.put("视频浏览最大间隔", maxInterval);
    storage.put("广告视频浏览最小间隔", adMinInterval);
    storage.put("广告视频浏览最大间隔", adMaxInterval);
    storage.put("主页ID", homepageId);
    storage.put("切换阈值", switchThreshold);

    // 打印调试信息
    log("配置已保存");
}


// 生成随机数
function getRandomValue(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

var scriptName = 'Dz-快手';
var version = '1.7';
var themeColor = '#4EBFDD';
var scriptTitle = scriptName + ' v' + version;
var APPVersion = 'Dz-快手';
var ScriptUIAllStr = ScriptUI.toString();
var ScriptUIStr = ScriptUIAllStr.slice(ScriptUIAllStr.indexOf('{'), ScriptUIAllStr.lastIndexOf('}')).slice(1, -2).replace(/项目标题/g, scriptTitle).replace(/#4EBFDD/g, themeColor);
configIDArr = ScriptUIStr.match(/ id( )?=( )?["|'].*?["|']/g).map(item => item.replace(/ id( )?=( )?["|']|"|'/g, ''));
password = '9999';


ui.statusBarColor(themeColor);
ui.layout(ScriptUIStr);

function ScriptUI() {
    <vertical>
        <appbar>
            <toolbar bg="#4EBFDD" layout_height="70" margin="-2" id="toolbar" title="项目标题" />
        </appbar>
        <ScrollView>
            <vertical marginTop="5">
                <card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
                    <vertical padding="18 8" h="auto">
                        <linear>
                            <Switch margin="12 0" layout_weight="1" id="autoService" text="无障碍服务" textSize="15sp" checked="{{auto.service != null}}" />
                            <Switch margin="12 0" layout_weight="1" id="floatyService" text="悬浮窗权限" textSize="15sp" checked="false" />
                            <Switch margin="12 0" layout_weight="1" id="循环" text="循环执行" textSize="15sp" checked="true" />
                        </linear>
                    </vertical>
                    <View bg="#4EBFDD" h="*" w="5" /> 
                </card>

                <card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
    <vertical padding="18 8" h="auto">
        
        <text text="IP功能选择:" marginLeft="5" w="auto" textStyle="bold" textColor='black'/>
        <radiogroup id="IP功能选择" orientation="horizontal">
            <checkbox id="选择框_IP更新" text="IP更新" textColor="black" checked='true'/>
            <checkbox id="选择框_数据网络更新" text="主机IP更新" textColor="black" checked='true'/>
        </radiogroup>

        <text text="广告功能选择:" marginLeft="5" w="auto" textStyle="bold" textColor='black'/>
        <radiogroup id="杂项功能" orientation="horizontal">
            <checkbox id="选择框_广告检测" text="广告检测(快速)" textColor="black" checked='true'/>
            <checkbox id="选择框_主页广告" text="主页广告检测" textColor="black" checked='true'/>
        </radiogroup>

        <text text="挂机模式：" marginTop="10" textStyle="bold" textColor='black'/>
        <radiogroup id="模式选择" orientation="horizontal">
        <checkbox id="选择框_主页浏览" text="随机主页浏览" textColor="black" checked='false'/>
        <checkbox id="选择框_随机搜索" text="随机搜索" textColor="black" checked='false'/>
        </radiogroup>

        <text text="1.IP更新为ST更新 2.主机更新为热点机更新" color="#0997F7" textStyle="bold" textSize="13sp"/>
        <text text="3.快速检测为侧滑检测 4.主页检测为用户页广告" color="#0997F7" textStyle="bold" textSize="13sp"/>
        <text text="随机搜索 暂不可用.更新时间:2024-11-09 02:48:56" color="#FF0000" textStyle="bold" textSize="13sp"/>
    </vertical>
    <View bg="#4EBFDD" h="*" w="5" />
</card>


                <View bg="#4EBFDD" h="*" w="5" />

                <card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
                    <vertical padding="18 8" marginBottom="2" h="auto">
                        <text text="[详细设置]" color="#FFA500" textStyle="bold" textSize="15sp"/>

                        <horizontal>
                            <text text="视频浏览量" textStyle="bold" textSize="15sp"/>
                            <input id="输入框_视频浏览最小量" text="16" color="#666666" w="0" layout_weight="1"/> 
                            <text text="-" textStyle="bold" textSize="15sp" marginLeft="5" marginRight="5"/> 
                            <input id="输入框_视频浏览最大量" text="35" color="#666666" w="0" layout_weight="1"/> 
                        </horizontal>

                        <horizontal>
                            <text text="视频浏览间隔(秒):" textStyle="bold" textSize="15sp"/>
                            <input id="输入框_视频浏览最小间隔" text="3" color="#666666" w="0" layout_weight="1"/> 
                            <text text="-" textStyle="bold" textSize="15sp" marginLeft="5" marginRight="5"/> 
                            <input id="输入框_视频浏览最大间隔" text="6" color="#666666" w="0" layout_weight="1"/> 
                        </horizontal>
                        <horizontal>
                            <text text="广告视频浏览间隔(秒):" textStyle="bold" textSize="15sp"/>
                            <input id="输入框_广告视频浏览最小间隔" text="8" color="#666666" w="0" layout_weight="1"/> 
                            <text text="-" textStyle="bold" textSize="15sp" marginLeft="5" marginRight="5"/> 
                            <input id="输入框_广告视频浏览最大间隔" text="12" color="#666666" w="0" layout_weight="1"/> 
                        </horizontal>

                        <horizontal>
                            <text text="切换阈值:" textStyle="bold" textSize="15sp"/>
                            <input id="切换阈值" text="3" color="#666666" w="*"/> 
                        </horizontal>

                        <horizontal>
                            <text text="主页ID:" textStyle="bold" textSize="15sp"/>
                            <input id="主页ID" text="3757389097#4336805973#4398908537" color="#666666" w="*"/>
                        </horizontal>
                        
                        <text text="多条用#分割,按顺序执行" color="#D2B48C" textStyle="bold" textSize="12sp"/>
                    </vertical>
                    <View bg="#4EBFDD" h="*" w="5" />
                </card>

                <card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
                    <button id="startScript" h="auto" text="开 始 运 行" textSize="17" textStyle="bold" color="#ffffff" bg="#4EBFDD" foreground="?selectableItemBackground" layout_gravity="bottom" />
                    <View bg="#4EBFDD" h="*" w="5" />
                </card>
            </vertical>
        </ScrollView>
    </vertical>
}

// 检查无障碍服务是否开启
function isAccessibilityServiceEnabled() {
    let enabledServices = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
    return enabledServices && enabledServices.includes(context.getPackageName() + "/com.stardust.autojs.core.accessibility.AccessibilityService");
}

// 检查悬浮窗权限是否开启
function isFloatyServiceEnabled() {
    return Settings.canDrawOverlays(context);
}

// 跳转到无障碍服务设置
function openAccessibilitySettings() {
    app.startActivity({
        action: "android.settings.ACCESSIBILITY_SETTINGS"
    });
}

// 跳转到悬浮窗权限设置
function openFloatySettings() {
    var intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
    intent.setData(Uri.parse("package:" + context.getPackageName()));
    app.startActivity(intent);
}

// 监听无障碍服务开关
ui.autoService.setOnCheckedChangeListener(function (widget, checked) {
    if (checked) {
        if (isAccessibilityServiceEnabled()) {
            toast("无障碍服务已开启");
        } else {
            toast("跳转到无障碍服务设置");
            openAccessibilitySettings();
        }
    } else {
        toast("无障碍服务已关闭");
    }
});

// 监听悬浮窗权限开关
ui.floatyService.setOnCheckedChangeListener(function (widget, checked) {
    if (checked) {
        if (isFloatyServiceEnabled()) {
            toast("悬浮窗权限已开启");
        } else {
            toast("跳转到悬浮窗权限设置");
            openFloatySettings();
        }
    } else {
        toast("悬浮窗权限已关闭");
    }
});

// 监听所有输入框的内容变化，自动保存配置
function setInputListeners() {
    ui.输入框_视频浏览最小量.addTextChangedListener({
        onTextChanged: function (text) {
            saveConfig();
        }
    });
    ui.输入框_视频浏览最大量.addTextChangedListener({
        onTextChanged: function (text) {
            saveConfig();
        }
    });
    ui.输入框_视频浏览最小间隔.addTextChangedListener({
        onTextChanged: function (text) {
            saveConfig();
        }
    });
    ui.输入框_视频浏览最大间隔.addTextChangedListener({
        onTextChanged: function (text) {
            saveConfig();
        }
    });
    ui.输入框_广告视频浏览最小间隔.addTextChangedListener({
        onTextChanged: function (text) {
            saveConfig();
        }
    });
    ui.输入框_广告视频浏览最大间隔.addTextChangedListener({
        onTextChanged: function (text) {
            saveConfig();
        }
    });
    ui.主页ID.addTextChangedListener({
        onTextChanged: function (text) {
            saveConfig();
        }
    });
    ui.切换阈值.addTextChangedListener({
        onTextChanged: function (text) {
            saveConfig();
        }
    });
}
function log(message) {
    ui.run(() => {
        if (floatyLogW) { // 检查 floatyLogW 是否有效
            let currentText = floatyLogW.logText.getText(); // 获取当前日志文本
            let lines = currentText.split("\n"); // 按行分割

            // 添加新日志
            lines.push(message);

            // 如果超过最大行数，删除最旧的行
            if (lines.length > maxLines) {
                lines.shift(); // 移除第一行
            }

            // 更新日志文本
            floatyLogW.logText.setText(lines.join("\n")); // 重新设置日志文本
        }
    });
}

function xfc() {
    function createRoundedButtonBackground(color) {
        let drawable = new android.graphics.drawable.GradientDrawable();
        drawable.setShape(android.graphics.drawable.GradientDrawable.RECTANGLE);
        drawable.setCornerRadius(20);
        drawable.setColor(android.graphics.Color.parseColor(color));
        return drawable;
    }
    
    function showLogWindow(x, y, executeMethod) {
        if (LOGFLOAT) {
            return toastLog('已启动悬浮窗');
        }
        LOGFLOAT = true;

        originalPosition.x = x;
        originalPosition.y = y;

        floatyLogW = floaty.rawWindow(
            <card id="logWindow" h="200" w="200" cardBackgroundColor="#b3000000" cardCornerRadius="8dp" cardElevation="1dp" gravity="center_vertical">
                <vertical paddingLeft="5" paddingRight="5" w="*">
                    <text id="logText" w="*" h="150" padding="5" textColor="#FFFFFF" textSize="12sp" gravity="left" />
                </vertical>
            </card>
        );

        setTimeout(() => {
            let logHeight = floatyLogW.getHeight();
            while (logHeight === 0) {
                logHeight = floatyLogW.getHeight();
            }

            floatyControlW = floaty.rawWindow(
                <card id="controlWindow" h="wrap_content" w="100dp" cardBackgroundColor="#00000000" cardCornerRadius="8dp" cardElevation="0dp" gravity="center_vertical">
                    <vertical gravity="center" marginTop="5">
                        <button id="toggle" text="显示/隐藏" w="100dp" h="45dp" textStyle="bold" />
                        <button id="start" text="暂停/恢复" w="100dp" h="45dp" textStyle="bold" />
                        <button id="off" text="结束脚本" w="100dp" h="45dp" textStyle="bold" />
                        <text id="infoText" text="推广：" textSize="25sp" textColor="#FF0033" />
                        <text id="runTimeText" text="0秒" textSize="25sp" textColor="#22DD48" />
                    </vertical>
                </card>
            );

            var startTime = new Date().getTime();   

            ui.run(() => {
                floatyControlW.toggle.setBackground(createRoundedButtonBackground("#61b4cf"));
                floatyControlW.start.setBackground(createRoundedButtonBackground("#00a86b"));
                floatyControlW.off.setBackground(createRoundedButtonBackground("#ee4d2d"));
            });

            setTimeout(() => {
                floatyControlW.setPosition(0, y + logHeight + 10);
            }, 100);

            // 更新运行时间的函数
            function updateRunTime() {
                let currentTime = new Date().getTime();
                let elapsedTime = Math.floor((currentTime - startTime) / 1000);
                let minutes = Math.floor(elapsedTime / 60);
                let seconds = elapsedTime % 60;

                ui.run(() => {
                    floatyControlW.runTimeText.setText(minutes + "分 " + seconds + "秒");
                });
            }

            // 定时更新运行时间
            setInterval(updateRunTime, 500); // 每秒更新一次

            floatyControlW.toggle.on("click", () => {
                if (isLogVisible) {
                    if (floatyLogW) {
                        originalPosition.x = floatyLogW.getX();
                        originalPosition.y = floatyLogW.getY();
                        floatyLogW.setPosition(-9999, -9999);
                    }
                    if (floatyControlW) {
                        floatyControlW.setPosition(0, 0);
                    }
                } else {
                    if (floatyLogW) {
                        floatyLogW.setPosition(originalPosition.x, originalPosition.y);
                    }

                    setTimeout(() => {
                        let newLogHeight = floatyLogW.getHeight();
                        if (floatyControlW) {
                            floatyControlW.setPosition(originalPosition.x, originalPosition.y + newLogHeight + 10);
                        }
                    }, 300);
                }
                isLogVisible = !isLogVisible;
            });

            floatyControlW.off.on("click", () => {
                toastLog("脚本已结束");
                if (floatyLogW) {
                    floatyLogW.close();
                }
                if (floatyControlW) {
                    floatyControlW.close();
                }
                exit();
            });

            floatyControlW.start.on("click", () => {
                isPaused = !isPaused;
                if (isPaused) {
                    log("已暂停，将会在本次ID结束暂停任务");
                } else {
                    log("已恢复");
                }
            });
        }, 300);
        
        setInterval(() => {}, 1000);
        executeMethod(log);
    }

    showLogWindow(0, 60, function(log) {
        log("脚本开始运行...");
    });
}

function 主页操作(版本) { // 随机刷视频
    log("主页操作中");
    
    // 进入首页
    for (var i = 0; i < 10; i++) {
        app.startActivity({
            action: "android.intent.action.VIEW",
            data: 版本
        });

        sleep(3000); // 等待应用加载时间
        
        if (text("精选").exists()) {
            log("找到精选，点击");
            click("精选"); 
            break;
        } else if (版本 !== "ksnebula://profile/") {
            log("打开精选失败，重新进入");
            back();
            sleep(1500);
            back();
            sleep(1500);
            back();
            sleep(1000);
            continue;
        } else {
            break;
        }
    }

    var 主页随机 = random(2, 3); // 生成2或3
    for (var i = 0; i < 主页随机; i++) { // 精选刷视频
        var 头像视频操作数 = random(2, 4); // 随机2到3
        var 操作数 = random(2, 6); // 随机整数 [2, 5]
        sleep(1000);
        if (text("精选").exists()) {
            log("找到精选，点击");
            click("精选"); 
           
        } else if (版本 !== "ksnebula://profile/") {
            log("打开精选失败，重新进入");
            back();
            sleep(1500);
            back();
            sleep(1500);
            back();
            sleep(1000);
            
        }
        // 刷视频操作
        for (var j = 1; j <= 操作数; j++) {
            log("主页操作数量: " + j + "/" + 操作数);
            hd(); // 假设 hd() 是你定义的函数
            sleep(1000);
        }

        sleep(3000);
        
        // 查找头像
        if (版本 !== "ksnebula://profile/"){
            var 头像 = className("android.view.View").depth(18); // 查找头像
        }else{
            var 头像 = className("android.view.View").depth(20); // 查找头像
        }

        if (头像) {
            头像.click();
            log("点击头像成功");
            sleep(1500);
            
            // 查找头像主页
            var 头像主页 = className("android.widget.RelativeLayout").depth(10).findOne(7000);
            if (头像主页) {
                头像主页.click();
                sleep(1000);
                
                // 刷视频操作
                for (var k = 0; k < 头像视频操作数; k++) {
                    log("主页视频操作数量: " + k + "/" + 头像视频操作数);
                    hd(); // 假设 hd() 是你定义的函数
                    sleep(1000);
                }

                // 返回到主页
                back();
                sleep(1500);
                back();
                sleep(1500);
                back();
            } else {
                log("未找到头像主页");
                back();
                sleep(1000);
                back();
                sleep(1000);
            }
        } else {
            log("未找到头像");
            back();
            sleep(1000);
            back();
            sleep(1000);
        }

        // 确保回到精选页面准备下一次刷视频
        if(版本 !== "ksnebula://profile/"){
            app.startActivity({
                action: "android.intent.action.VIEW",
                data: "kwai://home/"
            });
            sleep(3000); // 等待加载
        }else{
            app.startActivity({
                action: "android.intent.action.VIEW",
                data: "ksnebula://home/"
            });
            sleep(3000); // 等待加载
        }
        
    }
}
function 主页广告检测(当前版本) {
    var adElement = id(当前版本+"ad_header_banner_container").findOne(5000); // 等待最多5秒

    if (adElement) {
        var bounds = adElement.bounds();
        log("广告元素存在");

        // 检测广告元素范围内是否有特定文本
        var textToCheck = "查看"; // 你要检测的文本
        var textFound = textContains(textToCheck).findOne(2000); // 查找文本

        if (textFound) {
            // 手动检查文本元素是否在广告元素的范围内
            var textBounds = textFound.bounds();
            if (textBounds.centerX() >= bounds.left && textBounds.centerX() <= bounds.right &&
                textBounds.centerY() >= bounds.top && textBounds.centerY() <= bounds.bottom) {
                log("检测到文本 '" + textToCheck + "'，退出函数。");
                return; // 如果检测到文本，则退出函数
            }
        }

        // 模拟点击
        click(bounds.centerX(), bounds.centerY());
        log("已点击主页广告。");

        // 等待5秒再返回
        sleep(9000);
        log("返回操作。已等待5-8S");
        back(); // 模拟返回
        推广数 = 推广数 + 1;

        function updateInfoText(推广数) {
            ui.run(() => {
                floatyControlW.infoText.setText("推广：" + 推广数);
            });
        }
        updateInfoText(推广数);
    } else {
        log("广告元素不存在。");
        toast("广告元素不存在。");
    }
}




// 在应用启动时加载配置
loadConfig();
// 为所有输入框添加监听器
setInputListeners();

ui.startScript.on("click", function () {
    // 启动悬浮窗日志的线程
    threads.start(function() {
        sleep(500); 
        xfc();
    });
    // 启动刷视频的线程
    threads.start(function() {
        sleep(500); 
        
        刷视频();
    });
});

// 随机获取数量
function 随机数量() {
    var minViewCount = parseInt(ui.输入框_视频浏览最小量.getText().toString());
    var maxViewCount = parseInt(ui.输入框_视频浏览最大量.getText().toString());
    return getRandomValue(minViewCount, maxViewCount);
}

// 随机获取秒数
function 随机秒数() {
    var minInterval = parseInt(ui.输入框_视频浏览最小间隔.getText().toString());
    var maxInterval = parseInt(ui.输入框_视频浏览最大间隔.getText().toString());
    return getRandomValue(minInterval, maxInterval);
}
// 随机获取秒数
// 随机获取广告视频浏览秒数
function 随机广告秒数() {
    var minAdInterval2 = parseInt(ui.输入框_广告视频浏览最小间隔.getText().toString().trim());
    var maxAdInterval2 = parseInt(ui.输入框_广告视频浏览最大间隔.getText().toString().trim());
    return getRandomValue(minAdInterval2, maxAdInterval2);
    
}


// 滑动大小
function 滑动大小() {
    var minV滑动 = 700; // 直接使用数字
    var maxV滑动 = 1100; // 直接使用数字
    return getRandomValue(minV滑动, maxV滑动);
}

// 滑动函数
function hd() {
    var screenWidth = device.width;
    var screenHeight = device.height;
    var 滑动 = 滑动大小();
    // 从屏幕中部向上滑动
    gesture(500, // 滑动持续时间，单位为毫秒
        [screenWidth / 2, screenHeight /2+300], // 起始点（屏幕中心）
        [screenWidth / 2, screenHeight / 2 - 滑动] // 终点（向上滑动）
    );
}

// 打开应用信息界面
function openAppInfo(packageName) {
    var intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    intent.setData(Uri.parse("package:" + packageName));
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
    toast("正在打开应用信息: " + packageName);
}

function DEAppData(packageName) { // 清理缓存
    toast("准备检查‘清除数据’按钮...");
    for (var i = 0; i < 10; i++) {
        if (text("清除数据").exists()) {
            toast("‘清除数据’按钮已出现，准备点击...");
            sleep(2000); // 等待2秒
            click("清除数据"); // 点击“清除数据”
            sleep(2000); // 等待2秒
            if (text("清除缓存").exists()) {
                click("清除缓存"); // 点击“清除缓存”
                toast("已结束。");

            } else {
                toast("未找到‘清除缓存’按钮，结束操作。");
            }
            sleep(3000);
            if (text("确定").exists()) {
                click("确定"); // 点击“确定”
                toast("已结束。");
            } else {
                toast("未找到‘确定’按钮，结束操作。");
            }
            break; // 结束循环
        } else {
            toast("‘清除数据’按钮未出现，正在重新进入应用信息...");
            sleep(1000); // 等待1秒
            openAppInfo(packageName); // 重新打开应用信息
            sleep(2000); // 等待2秒
        }
    }
    
}

function manageAppData(packageName) { // 结束运行
    openAppInfo(packageName);
    sleep(2000); // 等待2秒
    toast("准备检查‘结束运行’按钮...");
    // 等待10秒，检查“结束运行”按钮是否出现
    for (var i = 0; i < 10; i++) {
        if (text("结束运行").exists()) {
            toast("‘结束运行’按钮已出现，准备点击...");
            sleep(2000); // 等待2秒
            click("结束运行"); // 点击“结束运行”
            sleep(2000); // 等待2秒
            if (text("确定").exists()) {
                click("确定"); // 点击“确定”
                toast("已结束。");
            } else {
                toast("未找到‘确定’按钮，结束操作。");
            }
            // 不再使用 return; 以确保继续执行后面的代码
            break; // 结束循环
        } else {
            toast("‘结束运行’按钮未出现，正在重新进入应用信息...");
            sleep(1000); // 等待1秒
            openAppInfo(packageName); // 重新打开应用信息
            sleep(2000); // 等待2秒
        }
    }

    // 在循环结束后无论条件是否满足都调用 DEAppData
    toast("‘结束运行’按钮未找到，准备调用 DEAppData...");
    DEAppData(packageName);
}

function Haiwei_DEAppData(packageName) { // 清理缓存
    toast("准备检查‘清除数据’按钮...");
    for (var i = 0; i < 10; i++) {
        if (text("存储").exists()) {
            toast("‘清除数据’按钮已出现，准备点击...");
            sleep(2000); // 等待2秒
            click("存储"); // 点击“清除数据”
            sleep(3000); // 等待2秒
            if (text("清空缓存").exists()) {
                click("清空缓存"); // 点击“清除缓存”
                toast("已结束。");

            } else {
                toast("未找到‘清空缓存’按钮，结束操作。");
            }
            sleep(3000);
            return; // 结束DEAppData函数
        } else {
            toast("‘清空缓存’按钮未出现，正在重新进入应用信息...");
            sleep(1000); // 等待1秒
            openAppInfo(packageName); // 重新打开应用信息
            sleep(2000); // 等待2秒
        }
    }
    
}
function Haiwei_manageAppData(packageName) { // 结束运行
    openAppInfo(packageName);
    sleep(2000); // 等待2秒
    toast("准备检查‘结束运行’按钮...");
    // 等待10秒，检查“结束运行”按钮是否出现
    for (var i = 0; i < 10; i++) {
        if (text("强行停止").exists()) {
            toast("‘强行停止’按钮已出现，准备点击...");
            sleep(2000); // 等待2秒
            click("强行停止"); // 点击“结束运行”
            sleep(3000); // 等待2秒
            if (text("强行停止").exists()) {
                click("强行停止"); // 点击“确定”
                toast("已结束。");
            } else {
                toast("未找到‘强行停止’按钮，结束操作。");
            }
            // 不再使用 return; 以确保继续执行后面的代码
            break; // 结束循环
        } else {
            toast("‘强行停止’按钮未出现，正在重新进入应用信息...");
            sleep(1000); // 等待1秒
            openAppInfo(packageName); // 重新打开应用信息
            sleep(2000); // 等待2秒
        }
    }

    // 在循环结束后无论条件是否满足都调用 DEAppData
    toast("‘结束运行’按钮未找到，准备调用 DEAppData...");
    Haiwei_DEAppData(packageName);
}

function 更换ip() {
    function launchApp(ipName) {
        // 通过包名启动应用
        app.launchPackage(ipName);
        // 等待应用启动
        sleep(3000);
    }
   
    // 启动应用
    sleep(1000)
    launchApp(ipName);
    sleep(3000)
    var 更换ip;
    if (更换ip = id("org.soutaproxy:id/tv_get_ip").findOne(5000)) {
        log("找到更换ip元素，准备点击");
        更换ip.click();
        log("更换ip成功");
    } else {
        toast("更换ip失败，重试中...");
        sleep(2000); // 等待2秒后重试
        launchApp(ipNameName); // 重新尝试启动应用
        sleep(3000);
        
        if (更换ip = id("org.soutaproxy:id/tv_get_ip").findOne(5000)) {
            log("再次找到更换ip元素，准备点击");
            更换ip.click();
            log("再次更换ip成功");
        } else {
            toast("再次更换ip失败");
        }
    }
}
// 检查网络连接
function checkNetwork(url, callback) {
    try {
        var res = http.get(url, {
            timeout: 5000 // 设置超时时间为5秒
        });

        if (res.statusCode === 200) {
            toast("网络正常，可以执行命令。");
            callback(); // 调用回调函数执行后续命令
            return true; // 返回 true 表示网络正常
        } else {
            log("网络异常，状态码：" + res.statusCode);
            return false; // 返回 false 表示网络异常
        }
    } catch (error) {
        log("网络检查失败：" + error.message);
        return false; // 返回 false 表示网络异常
    }
}

// 打开数据模式设置界面
function openAirplaneModeSettings() {
    app.startActivity({
        action: "android.settings.DATA_ROAMING_SETTINGS"
    });
    log("已打开数据网络设置界面，请稍等...");
}

// 循环检查并点击数据模式
function monitorAirplaneMode() {
    var intervalId = setInterval(function() {
        // 检查界面中是否存在“飞行模式”文本
        var airplaneModeText = text("启用数据网络");

        if (airplaneModeText.exists()) {
            // 如果找到了文本，则进行点击
            click("启用数据网络");
            toast("启用数据网络已关闭,五秒后开启");
            sleep(8000)
            click("启用数据网络");
            clearInterval(intervalId); // 停止检查
        } else {
            toast("正在等待启用数据网络文本出现...");
        }
    }, 3000); // 每3秒检查一次
}
// 从随机位置向左滑动并按住
function 侧滑() {
    var screenWidth = device.width;
    var screenHeight = device.height;
    let 随机 = 滑动大小();
    
    // 随机生成起始点的 Y 坐标
    var randomX = screenWidth / 2; // 中间的 X 坐标
    var randomY = 随机; // 随机 Y 坐标

    // 定义滑动的起始点和终点
    var startX = randomX; // 随机 X 坐标
    var startY = randomY; // 随机 Y 坐标
    var endX = startX - 100; // 向左滑动 100 像素
    var endY = startY; // Y 坐标保持不变

    // 输出滑动坐标到日志
    log("滑动起始点: (" + startX + ", " + startY + ")");
    log("滑动终点: (" + endX + ", " + endY + ")");

    // 按住起始点
    press(startX, startY, 100); // 按住 100 毫秒

    // 直接进行滑动
    sleep(500); // 等待 500 毫秒
    swipe(startX, startY, endX, endY, 500); // 500 毫秒内滑动
    toast("从随机位置向左滑动。");
}
// 检测并截图第六个指定 ID 的元素
function captureSixthElement(版本) {
    // 查找所有具有指定 ID 的元素

    var elements = id(版本+"slide_play_item_container").find();

    // 获取元素数量
    var count = elements.length;

    // 输出到日志
    log("找到的元素数量: " + count);
    toast("找到的元素数量: " + count);

    // 检查是否至少有六个元素
    if (count >= 6) {
        // 第一次截图
        var firstScreenshotPath = screenshotElement(elements[4]);

        // 向下滑动
        hd();

        // 等待一会儿，以确保滑动后的内容加载
        sleep(1000);

        // 第二次截图
        var secondScreenshotPath = screenshotElement(elements[4]);

        // 对比两次截图
        compareScreenshots(firstScreenshotPath, secondScreenshotPath);
    } else {
        toast("没有找到至少六个元素。");
    }
}

// 截取指定 ID 的第六个元素的屏幕
function screenshotElement(element) {
    var bounds = element.bounds();
    var left = bounds.left;
    var top = bounds.top;
    var right = bounds.right;
    var bottom = bounds.bottom;

    // 进行截图
    var img = images.captureScreen();
    var croppedImage = images.clip(img, left, top, right - left, bottom - top);
    var filePath = "/sdcard/screenshot_" + Date.now() + ".png"; // 保存的文件路径
    images.save(croppedImage, filePath); // 保存裁剪后的图像
    return filePath; // 返回文件路径
}

// 比较两张截图
function compareScreenshots(firstPath, secondPath) {
    var firstImage = images.read(firstPath);
    var secondImage = images.read(secondPath);

    // 检查图像大小是否相同
    if (firstImage.getWidth() !== secondImage.getWidth() || firstImage.getHeight() !== secondImage.getHeight()) {
        toast("存在：两张图片尺寸不同。");
    } else {
        // 逐像素比较
        var isSame = true;
        for (var y = 0; y < firstImage.getHeight(); y++) {
            for (var x = 0; x < firstImage.getWidth(); x++) {
                if (images.pixel(firstImage, x, y) !== images.pixel(secondImage, x, y)) {
                    isSame = false;
                    break;
                }
            }
            if (!isSame) break;
        }

        if (isSame) {
            toast("不存在：两次截图相同。");
            检测="false"
        } else {
            toast("存在：两次截图不同。");
            检测="true"
        }
    }

    // 清理资源
  
}




checkNetwork(url, function() {
    openAirplaneModeSettings(); // 打开数据模式设置
    monitorAirplaneMode(); // 开始数据模式文本
});
// 按顺序处理主页 ID
function 处理主页ID(idString) {
    // 确保 idString 是字符串
    var ids = String(idString).split('#').filter(id => id.trim() !== "");

    // 计数器，用于记录处理的 ID 数量
    var count = 0;

    // 无限循环，直到手动停止
    threads.start(function() {
        
        while (true) {
            
            for (var i = 0; i < ids.length; i++) {
                if (!ui.循环.isChecked()) {
                    log("循环执行已关闭，停止刷视频。");
                    return; // 退出函数
                }
                while (isPaused) {
                    sleep(1000); // 暂停时等待
                    continue; // 跳过当前循环
                }
                var homepageId = ids[i].trim();

               
            
                // 切换标准版和极速版
                var baseUrl = (count < ui.切换阈值.getText()) ? 标准版 : 极速版;
                var 当前版本 = (count < ui.切换阈值.getText()) ? 快手 : 快手极速;
                if(ui.选择框_主页浏览.checked){
                    主页操作(baseUrl);
                }
               
                log("正在处理主页 ID: " + homepageId);
                sleep(2000)

                app.startActivity({
                    action: "android.intent.action.VIEW",
                    data: baseUrl + homepageId
                });

                sleep(3800); // 等待应用加载时间
                log("已打开主页 ID: " + homepageId);
                
                // 观看视频逻辑
                var 视频数量 = 随机数量();
                log("本次观看数量为：" + 视频数量);

                // 判断元素是否存在，优先点击标准版元素
                 var videoElement = className("android.widget.RelativeLayout").depth(10).findOne(7000);
                sleep(1300)
                主页广告检测(当前版本)
                sleep(1300)
                if (videoElement) {
                    videoElement.click();
                    log("点击视频元素，进度：" + "1/" + 视频数量);
                } else {
                    console.warn("未找到视频元素，正在返回主页。");
                    back(); // 返回上一页
                    sleep(2000); // 等待返回
                    
                    app.startActivity({
                        action: "android.intent.action.VIEW",
                        data: baseUrl + homepageId
                    });
                    var videoElement1 = className("android.widget.RelativeLayout").depth(10).findOne(7000);
                    sleep(2000)
                    if (videoElement1) {
                        videoElement1.click();
                        log("点击视频元素，进度：" + "1/" + 视频数量);
                    }


                }
                if(ui.选择框_广告检测.checked){
                    sleep(3000)
                    toast("1")
                    侧滑()
                    sleep(3000)
                    toast("2")
                    captureSixthElement(当前版本)
                    if(检测!=="ture"){
                        back()
                        sleep(1300)
                        back()
                        sleep(1300)
                        back()
                        continue 

                    }


                }



                var 等待秒数 = 随机秒数();
                log("本次等待" + 等待秒数 + "秒");
                sleep(等待秒数 * 1000);

                for (var j = 2; j <= 视频数量; j++) {
                    hd();
                   sleep(1000)
                    if(广告 = className("android.widget.ImageView").depth(17).desc("creator_icon").findOne(1000)){
                        log("疑似广告")
                        if (广告 && 广告.visibleToUser()) { // 检查元素是否可见
                            log("进度：" + j + "/" + 视频数量);
                            log("广告")
                            推广数=推广数+1;
                            function updateInfoText(推广数) {
                                ui.run(() => {
                                    floatyControlW.infoText.setText("推广：" + 推广数);
                                });
                            }
                            
                            // 调用更新函数
                            updateInfoText(推广数)                            
                            log("本次广告等待时间" + adInterval + "秒");
                            var adInterval = 随机广告秒数();
                            sleep(1000)
                            sleep(adInterval * 1000);
                        } 
                    }else{
                        log("进度：" + j + "/" + 视频数量);
                        等待秒数 = 随机秒数();
                        log("本次等待" + 等待秒数 + "秒");
                        sleep(等待秒数 * 1000);
                    }
                   

                }

                for (var k = 0; k < 2; k++) {
                    back();
                    sleep(500);
                }

                count++; // 增加计数器
                if (count >= ui.切换阈值.getText()*2) {
                    count = 0; // 重置计数器
                    home()
                    sleep(300)
                    log("结束标准版 ");
                    
                    
                

               // if(ui.选择框_Xiaomi.checked){
                    manageAppData("com.smile.gifmaker"); 
                //}else{
                   // Haiwei_manageAppData("com.smile.gifmaker");

                //}

                sleep(1000)
                back()
                sleep(1000)
                back()
                sleep(1000)
                log("结束极速版 ");
                //if(ui.选择框_Xiaomi.checked){
                    manageAppData("com.kuaishou.nebula"); 
                //}else{
                  //  Haiwei_manageAppData("com.kuaishou.nebula"); 
               // }
                
                sleep(1000)
                back()
                sleep(1000)
                back()
                sleep(1000)
                if(ui.选择框_IP更新.checked){
                    更换ip()
                }
                if(ui.选择框_数据网络更新.checked){
                    checkNetwork(url, function() {
                        openAirplaneModeSettings(); // 打开数据模式设置
                        monitorAirplaneMode(); // 开始数据模式文本
                    });
                }
                
                }
            }
        }
    });
    
    log("所有主页 ID 任务已完成");
    
}



// 刷新视频函数
function 刷视频() {
    if (!requestScreenCapture()) {
        toast("请求屏幕捕获权限失败");
        exit(); // 退出脚本
    }
    处理主页ID(ui.主页ID.getText()); // 处理主页 ID
}

// 在应用启动时加载配置
loadConfig();
// 为所有输入框添加监听器
setInputListeners();

alert("随机搜索 暂不可用.更新时间:2024-11-09 02:48:56");